package dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
import modelo.Preventiva;
import java.sql.ResultSet;
import util.DBUtil;

public class PreventivaDAO {
	
	private Connection con;
	private int res; 
	private static PreventivaDAO instancia;

	private PreventivaDAO(){
		con = DBUtil.getConnection();
	}
	
	public static PreventivaDAO getInstancia(){
		if (instancia == null){
			instancia = new PreventivaDAO();
		}
		
		return instancia;
	}
	
	public boolean inserir(Preventiva novaPreventiva){
		try {

			Statement st = con.createStatement();
			String sql = "insert into manutencao (cod, tipo, " +
					"datainicial, datafinal, horainicial, horafinal," +
					"tagequip, resptecnico) values " +
					"('"+novaPreventiva.getCodManutencao()+"'," +
					"'"+novaPreventiva.getTipoManut()+"'," +
					"'"+novaPreventiva.getDataInicial()+"'," +
					"'"+novaPreventiva.getDataFinal()+"'," +
					"'"+novaPreventiva.getHoraInicial()+"'," +
					"'"+novaPreventiva.getHoraFinal()+"'," +
					"'"+novaPreventiva.getTagEquip()+"'," +
					"'"+novaPreventiva.getRespTecnico()+"')";
			System.out.println(sql);
			res = st.executeUpdate(sql);
			
			//Statement 
			st = con.createStatement();
			
			//String 
			sql = "insert into preventiva (codmanut, codpreventiva, " +
				"tensaomedida, ampmedida, resisolmedida, resbobinamedida, " +
				"tempmedida, periodmanutequip, prevperiodequip, condequip) values " +
				"('"+novaPreventiva.getCodManutencao()+"'," +
				"'"+novaPreventiva.getCodPreventiva()+"'," +
				novaPreventiva.getTensaoMedida()+"," +
				novaPreventiva.getAmpMedida()+"," +
				novaPreventiva.getResIsolMedida()+"," +
				novaPreventiva.getResBobinaMedida()+"," +
				novaPreventiva.getTempMedida()+"," +
				"'"+novaPreventiva.getPeriodManutEquip()+"'," +
				"'"+novaPreventiva.getPrevPeriodEquip()+"'," +
				"'"+novaPreventiva.getCondEquip()+"')";
			System.out.println(sql);
			res = st.executeUpdate(sql);
			
			if(res==0)
				return false;
			else
				return true;
								
		} catch (SQLException er) {
			// TODO Auto-generated catch block
			er.printStackTrace();
		}
		return false;
	}

	public Preventiva buscar (Preventiva preventiva){

		try {
			Preventiva p = new Preventiva();
			
			// preparar o statement
			String sql = "select * from manutencao where cod = ? ";
			PreparedStatement comandoSql = con.prepareStatement(sql);
			comandoSql.setString(1,preventiva.getCodManutencao());
	
			ResultSet resultado = comandoSql.executeQuery();

			if(resultado.next()){
				p.setTipoManut(resultado.getString("tipo"));
				p.setDataInicial(resultado.getDate("datainicial"));
				p.setDataFinal(resultado.getDate("datafinal"));
				p.setHoraInicial(resultado.getString("horainicial"));
				p.setHoraFinal(resultado.getString("horafinal"));
				p.setTagEquip(resultado.getString("tagequip"));
				p.setRespTecnico(Integer.valueOf(resultado.getString("resptecnico")));
				
			
				// preparar o statement
				//String 
				sql = "select * from preventiva where codmanut = ? ";
				//PreparedStatement 
				comandoSql = con.prepareStatement(sql);
				comandoSql.setString(1,preventiva.getCodManutencao());
	
				//ResultSet 
				resultado = comandoSql.executeQuery();

				if(resultado.next()){
					p.setCodManut(resultado.getString("codmanut"));
					p.setCodPreventiva(resultado.getString("codpreventiva"));
					p.setTensaoMedida(Float.valueOf(resultado.getFloat("tensaomedida")));
					p.setAmpMedida(Float.valueOf(resultado.getFloat("ampmedida")));
					p.setResIsolMedida(Float.valueOf(resultado.getFloat("resisolmedida")));
					p.setResBobinaMedida(Float.valueOf(resultado.getFloat("resbobinamedida")));
					p.setTempMedida(Float.valueOf(resultado.getFloat("tempmedida")));
					p.setPeriodManutEquip(resultado.getString("periodmanutequip"));
					p.setPrevPeriodEquip(resultado.getString("prevperiodequip"));
					p.setCondEquip(resultado.getString("condequip"));
					return p;
				}
			}
		}
		catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		return null;
	}
	
	public boolean excluir(Preventiva preventiva) {
		// TODO Auto-generated method stub
		String	sql	=	"delete from manutencao where cod = ?";
		try{
			PreparedStatement comandoSql = con.prepareStatement(sql);
			comandoSql.setString(1, preventiva.getCodManutencao());
			int res = comandoSql.executeUpdate(); 
			if(res==0)
				return false;
			else{
				//String 
				sql = "delete from preventiva where codmanut = ?";
				try {
					//PreparedStatement 
					comandoSql = con.prepareStatement(sql);
					comandoSql.setString(1, preventiva.getCodManutencao());
					int cont = comandoSql.executeUpdate();
					if(cont==0)
						return false;
					else
						return true;
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
	
	public boolean alterar(Preventiva preventiva) {
		
		String sql = "update manutencao set tipo = " + 
			"'"+preventiva.getTipoManut()+"'," +
			"datainicial = " + "'"+preventiva.getDataInicial()+"'," +
			"datafinal = " + "'"+preventiva.getDataFinal()+"'," +
			"horainicial = " + "'"+preventiva.getHoraInicial()+"'," +  
			"horafinal = " + "'"+preventiva.getHoraFinal()+"'," +
			"tagequip = " + "'"+preventiva.getTagEquip()+"'," +
			"resptecnico = " + "'"+preventiva.getRespTecnico()+"'" +
			"where cod = ?";
		try{
			PreparedStatement comandoSql = con.prepareStatement(sql);
			comandoSql.setString(1, preventiva.getCodManutencao());
			int res = comandoSql.executeUpdate();
			if (res==0)
				return false;
			else{
				//String 
				sql = "update preventiva set " +
				" tensaomedida = " + preventiva.getTensaoMedida() +
				" ,ampmedida = " + preventiva.getAmpMedida() +
				" ,resisolmedida = " + preventiva.getResIsolMedida() +
				" ,resbobinamedida = " + preventiva.getResBobinaMedida() +
				" ,tempmedida = " + preventiva.getTempMedida() +
				" ,periodmanutequip = '" + preventiva.getPeriodManutEquip() +
				" ',prevperiodequip = '" + preventiva.getPrevPeriodEquip() +
				" ',condequip = '" + preventiva.getCondEquip() +
				" ' where codmanut = ?";
				try {
					//PreparedStatement 
					comandoSql = con.prepareStatement(sql);
					comandoSql.setString(1, preventiva.getCodManutencao());
					int cont = comandoSql.executeUpdate();
					if(cont==0)
						return false;
					else
						return true;
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}	
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}
}